카메라 응답 함수를 이용한 High Dynamic Range 및 Low Dynamic Range 예제

간략한 설명

파일: \examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Bayer.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Color.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Gray.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_4xCxp2L.vad

기본 플랫폼: mE5-MA-VCL, imaFlex CXP-12 Quad

간단한 설명

Debevec와 Malik에 따른 HDR 알고리즘 및 Reinhard 외 연구진과 Fattal 외 연구진에 따른 LDR 알고리즘.

High Dynamic Range(HDR) 이미지는 넓은 범위의 명도를 재현합니다. 따라서 매우 어두운 디테일과 매우 밝은 디테일이 하나의 이미지에 결합됩니다. 대부분의 사진 기법에서는 단 한 번의 Exposure Time으로 이처럼 넓은 범위의 명도를 구현하는 것이 불가능합니다. 따라서 HDR 이미지는 서로 다른 Exposure Time으로 촬영한 이미지들을 결합하여 생성됩니다. 대부분의 디스플레이에서는 HDR 이미지를 직접 표시할 수 없습니다. 그러므로 HDR 이미지를 표시하려면 Low Dynamic Range(LDR) 이미지에 맞추어 밝기 대비를 비례 축소해야 합니다. 이러한 과정을 톤 매핑(Tone Mapping)이라고도 합니다. 이 VisualApplets 예제에서는 Debevec와 Malik[Deb97]의 HDR 알고리즘이 구현되어 있습니다. LDR 알고리즘은 Reinhard[Rei02] 및 Fattal[Fat02]을 따릅니다. 아래에서는 두 알고리즘에 대해 간단히 설명합니다.

High Dynamic Range Imaging

픽셀 값 픽셀 좌표가 및 인 이미지 i에서의 값은 조도 값 및 Exposure Time :

의 함수로 표현될 수 있습니다. 방정식 32.


다음과 같이 정의할 때 다음이 성립합니다:

방정식 33.


여기서 우리는 을(를) 응답 곡선(Response Curve)이라고 부릅니다. 이는 Exposure Time 에 대한 픽셀 값 을(를) 장면 조도와 연결하며 . 은(는) 모든 픽셀에 대해 일정하다고 가정합니다. 알고 있는 경우, 및 , 은(는) 특이값 분해(Singular Value Decomposition) 방법을 사용하여 계산할 수 있습니다 [Deb97]. 이제 다음 표현식을 사용하여 HDR 이미지를 생성할 수 있습니다 [Deb97]:

방정식 34.


여기서 은(는) 결과 HDR 이미지의 x,y 픽셀에서의 로그 조도 값(밑 )입니다. 컬러 이미지의 경우 은(는) 빨강, 초록, 파랑 값이며 (, 및 ). 즉, Equation 34 은(는) 빨간색, 초록색, 파란색 값에 대해 각각 개별적으로 계산되어야 합니다. 은(는) 노출 횟수입니다. 여기서 Equation 34 은(는) 가중치 함수입니다:

Equation 35.


저다이나믹 레인지 이미징

베이어 및 컬러 이미지

HDR 이미지를 표시하려면 밝기 대비를 줄여야 합니다. Reinhard 외 [Rei02]에 따르면 LDR 휘도 는 다음과 같이 계산할 수 있습니다:

Equation 36.


여기서 은(는) 스케일링된 HDR 휘도입니다:

Equation 37.


파라미터는 은(는) 표시되는 LDR 이미지의 밝기를 조절합니다. 일반적인 값은 0.09에서 0.72 사이입니다 [Rei02]. 이른바 상대적 "world" 휘도 는 HDR 색상으로부터 다음과 같이 계산됩니다: , 및 :

Equation 38.


평균값 은(는) 이 예제에서 다음과 같이 계산됩니다:

Equation 39.


Fattal 외 [Fat02]에 따르면 LDR 색상 성분 , 및 은(는) 이제 다음과 같이 재구성될 수 있습니다:

수식 40.


그레이스케일 이미지

LDR 이미지 값은 디스플레이 출력을 위한 그레이스케일 이미지의 경우 다음과 같이 계산할 수 있습니다.

수식 41.


여기서 다음 항목에 따른 HDR 처리 결과입니다. Equation 34. 출력 이미지의 밝기를 조절하는 데 사용할 수 있는 매개변수 상수입니다.

VisualApplets 디자인

매우 어두운 객체와 매우 밝은 객체가 포함된 매우 넓은 조도 범위의 장면을 촬영하기 위한 HDR/LDR 알고리즘은 VisualApplets에서 그레이스케일("HDR_CRC_Gray.vad"), 베이어("HDR_CRC_Bayer.vad") 및 컬러("HDR_CRC_Color.vad") 카메라 이미지용으로 구현되어 있습니다. 모든 장면의 객체가 적절하게 표시되는 이미지가 PC로 전송됩니다. 디자인 "HDR_CRC_Bayer.vad"의 기본 구조는 그림 347에 나와 있습니다. 모든 예시는 동일한 원리를 따릅니다. 베이어 패턴 로우 이미지의 경우, 모든 이미지 픽셀에 대한 빨간색, 초록색, 파란색 값이 Bayer HierarchicalBox 내에서 Bayer5x5Linear 오퍼레이터를 사용하여 계산됩니다. 이 박스는 "HDR_CRC_Bayer.vad" 예시의 유일한 콘텐츠입니다. ImageSequence 박스에서는 3개의 이미지 시퀀스가 버퍼링됩니다. 3개의 이미지는 HDR-LDR 처리를 위해 서로 다른 3개의 Exposure Time을 가져야 합니다. Exposure Time은 이미지 시퀀스의 이미지 중 적어도 하나에서는 모든 이미지 픽셀이 과소 노출이나 과다 노출되지 않도록 선택해야 합니다. 이 시간은 HierarchicalBox Trigger 내의 SignalWidth width1 ~ width3 오퍼레이터를 사용하여 설정할 수 있습니다(그림 348 참조). 시간 단위는 8 ns의 시스템 클럭 틱임을 유의하십시오. Generate-Period 오퍼레이터는 SignalWidth width1 ~ width3 오퍼레이터의 가장 긴 시간보다 큰 값으로 설정해야 합니다. 또한 카메라 매뉴얼에서 Generate-Period 오퍼레이터의 최소 주기 길이를 참조하십시오. 3개의 이미지는 앞서 설명한 Debevec 및 Malik[Deb97]에 따른 HDR 알고리즘을 사용하여 결합됩니다. 이는 HierarchicalBox HDR(그림 347)에 구현되어 있습니다. 그레이스케일, 베이어 및 컬러 이미지에 대한 구현 방식은 동일합니다. LDR 알고리즘은 LDR에 구현되어 있습니다. 컬러/베이어 이미지와 그레이스케일 이미지에 대한 구현은 서로 다릅니다(섹션 및 참조). 결과 RGB 이미지의 색상은 HierarchicalBox OutputToPC에서 병합됩니다. 이 박스는 "HDR_CRC_Gray.vad" 예시에는 존재하지 않습니다. SourceSelector 오퍼레이터를 사용하면 처리된 HDR-LDR 이미지 또는 (베이어 디모자이킹된) 카메라 이미지 중 하나를 DMA 전송하도록 선택할 수 있습니다.

기본 디자인 구조

그림 347. 기본 디자인 구조


Trigger 박스의 내용

그림 348. Trigger 박스의 내용


그림 349 에서 다음 HierarchicalBox의 내용을 확인할 수 있습니다. HDR. 버퍼링된 이미지 시퀀스의 3개 이미지에 대해, 첫 번째 이미지부터 세 번째 이미지까지의 분자 및 분모의 항이 의 멤버 Equation 34 빨간색, 초록색, 파란색 색상별로 각각 계산됩니다(HierarchicalBox Image1 (으)로 Image3).

HDR 박스의 내용

그림 349. HDR 박스의 내용


그림 350 에서 이미지 1의 빨간색 색상에 대한 이 계산을 확인할 수 있습니다(다음 HierarchicalBox 내: Red 박스 내 Image1)을 예로 듭니다. 모든 이미지의 모든 색상은 동일한 방식으로 처리됩니다. 카메라 응답 곡선(CRC)의 로그 값은 HierarchicalBox 내의 룩업 테이블을 사용하여 (빨강/초록/파랑) 픽셀 값에 할당됩니다. over127 픽셀 값이 127보다 높거나 박스 내에 있는 경우 underequal127 픽셀 값이 127 이하인 경우. 이러한 룩업 테이블의 콘텐츠는 gO127 및 g_ueq_127 빨강, 초록, 파랑 색상의 경우 Debevec와 Malik의 코드를 기반으로 한 Matlab 프로그램 모듈 "HDR_CRC.m", "sample.m", "gsolve.m"(\examples\Processing\Advanced\HighDynamicRange\ 아래)을 사용하여 계산할 수 있으며,Deb97], 부분적으로는 M. Eitz의 예제[Eit07]를 기반으로 합니다. 코드 사용 방법에 대한 자세한 지침은 "HDR_CRC.m"의 짧은 매뉴얼을 참조하십시오. 다음을 사용하여 CONST operator LNdt1 (그리고 유사하게 LNdt2 및 LNdt3 (이미지 2 및 3의 경우)) 노출 시간의 로그(밑: e) 값을 설정할 수 있습니다. 이 값은 16개의 소수부 비트로 인해 를 곱해야 합니다. 해당 시간 기준(Time Base)은 파라미터인 LNTimeBase를 통해 선택할 수 있습니다. 값은 , 또는 시간 단위를 초, 밀리초 또는 마이크로초로 설정합니다. 룩업 테이블에서 weight 그림 350 의 가중치 함수 Equation 35 가 구현되어 있습니다. Matlab 프로그램 모듈인 "HDR_CRC.m", "sample.m", "Weight.m"을 사용하여 가중치 테이블 "Weights.txt"를 생성할 수 있습니다. 자세한 지침은 "HDR_CRC.m" (또는 그레이스케일 이미지의 경우 "HDR_CRC_Gray.m")의 간편 설명서를 참조하십시오. HierarchicalBox의 최종 출력 Red (그리고 유사하게 초록색 및 Blue) 상자 내부 Image1 (그리고 유사하게 Image2 및 Image3)은 다음 작업이 수행됩니다 및 .

Image1의 Red 컴포넌트 내용

그림 350. Image1의 Red 컴포넌트 내용


그림으로 돌아가서 349 상자의 내용으로서 HDR. HDR 색상 컴포넌트의 로그 값 계산은 , 및 다음을 따릅니다 Equation 34 상자에서 수행됩니다 Red, 초록색 및 Blue. 분자 및 분모의 값에 대한 모든 컴포넌트의 합산과 최종 나눗셈이 여기서 구현됩니다 (예: 그림의 351 빨간색 참조).

HDR에서의 Red 상자 내용

그림 351. HDR에서의 Red 상자 내용


상자 Lw 그림 349 에는 로그 값으로부터의 , 및 HDR 색상 값 계산이 포함됩니다. 지수 함수는 룩업 테이블로 구현됩니다. 상대적 "world" 휘도 "Lw"는 다음과 같이 HDR 색상 컴포넌트로부터 계산됩니다 Equation 38. 에 따른 그 평균값은 식 39 는 상자 내에서 계산됩니다 Lw_d 모듈 내에서 LDR (기본 설계 구조는 그림 참조. 347). 의 전체 내용은 LDR 그림에 나와 있다. 352.

"HDR_CRC_Bayer.vad" 및 "HDR_CRC_Color.vad" 설계에서 LDR 블록의 내용

그림 352. “HDR_CRC_Bayer.vad” 및 “HDR_CRC_Color.vad” 설계에서 LDR 박스의 내용


이 모듈 Ls 다음에 따라 스케일링된 휘도 계산이 포함되어 있습니다. 식 37 상대적인 “세계” 휘도의 비율과 그 평균값에 “밝기 매개변수”를 곱한 값 a. 이 매개변수 값을 변경하면 최종 처리된 이미지의 밝기를 조절할 수 있습니다. 이 매개변수에 대한 적절한 값은 VA 설계의 주석 상자에서 확인할 수 있으며, 더 자세한 내용이 궁금하신 경우 [Rei02]. LDR_휘도 다음에 따라 LDR 휘도를 계산합니다. 식 36. 이 값은 마지막으로 HierarchicalBox의 출력값과 곱해집니다. HDRColor , 및 적색, 녹색, 청색 색상 성분 각각에 대해. 그 결과로 LDR의 적색, 녹색, 청색 색상 성분이 산출됩니다. [Fat02] 처리된 출력 이미지의. HierarchicalBox의 콘텐츠 LDR 그레이스케일 이미지에 대한 내용은 그림에 나와 있습니다. 353.

"HDR_CRC_Gray.vad" 디자인의 LDR 박스 콘텐츠

그림 353. "HDR_CRC_Gray.vad" 디자인의 LDR 박스 콘텐츠


HierarchicalBox에서 Exp_Ln 은(는) 다음으로부터 계산됩니다. 해당 로그 값 HDR 처리 결과로 (Equation 34). 박스에서 SQRT 제곱근은 섹션의 알고리즘에 따라 추출됩니다. . 결과는 자기 자신으로 나뉩니다. 더하기 . 의 값 그리고 이를 통해 출력 이미지의 밝기를 연산자로 설정할 수 있습니다. ShiftLeft_Brightness.